package com.exam.util;

import io.jsonwebtoken.*;

import java.util.Date;
import java.util.Map;

public class JwtUtil {
    public static final String SALT = "salt134567";

    /**
     * 生成JWT token
     *
     * @param info    存储在token中的信息，以map形式传入
     * @param minutes token过期时间，以分钟为单位
     * @return 生成的token字符串
     */
    public static String getToken(Map<String, Object> info, Integer minutes) {
        JwtBuilder jwtBuilder = Jwts.builder();
        jwtBuilder.setHeaderParam("alg", "HS256");
        jwtBuilder.setHeaderParam("typ", "JWT");
        jwtBuilder.setIssuer("exam");
        jwtBuilder.setSubject("exam");

        jwtBuilder.setExpiration(new Date(System.currentTimeMillis() + minutes * 60 * 1000));
        jwtBuilder.addClaims(info);

        jwtBuilder.signWith(SignatureAlgorithm.HS256, SALT);
        return jwtBuilder.compact();
    }

    /**
     * 解析JWT token
     *
     * @param token 要解析的token字符串
     * @return 解析后的Claims对象
     */
    public static Claims parse(String token) {
        JwtParser jwtParser = Jwts.parser();
        Jws<Claims> claimsJws = jwtParser.setSigningKey(SALT).parseClaimsJws(token);
        return claimsJws.getBody();
    }

    /**
     * 解析JWT token中指定的信息
     *
     * @param token 要解析的token字符串
     * @param key   要解析的对应的键
     * @return 解析后的值
     */
    public static String parse(String token, String key) {
        return (String) parse(token).get(key);
    }
}
